package com.ushine.web.component.authority.utils;

import com.ushine.web.component.contant.SysConstant;
import org.apache.commons.lang3.StringUtils;

import java.util.*;

/**
 * @Author: yls
 * @Date: 2022/02/24 10:37
 * @Description:
 * @Version 1.0
 */
public class DataColumnUtils {

    private DataColumnUtils() {

    }

    public static final Map<String, Integer> EXCLUDE_COLUMN_MAP = new HashMap<>();

    static {
        EXCLUDE_COLUMN_MAP.put("id", 1);
        EXCLUDE_COLUMN_MAP.put("createTime", 1);
        EXCLUDE_COLUMN_MAP.put("createUserName", 1);
        EXCLUDE_COLUMN_MAP.put("createUserId", 1);
        EXCLUDE_COLUMN_MAP.put("lastUpdateTime", 1);
        EXCLUDE_COLUMN_MAP.put("lastUpdateUser", 1);
        EXCLUDE_COLUMN_MAP.put("deleted", 1);
    }

    /**
     * 功能描述:
     * 〈 判断是否是基础数据类型，即 int,double,long等类似格式 〉
     *
     * @param clazz 数据类型
     * @return : boolean
     * @author : yls
     * @date : 2022/02/24 11:00
     */
    public static boolean isCommonDataType(Class clazz) {
        return clazz.isPrimitive();
    }

    /**
     * 功能描述:
     * 〈 判断是否是基础数据类型的包装类型 〉
     *
     * @param clazz 字段类型
     * @return : boolean
     * @author : yls
     * @date : 2022/02/24 11:00
     */
    public static boolean isWrapClass(Class clazz) {
        try {
            return ((Class) clazz.getField("TYPE").get(null)).isPrimitive();
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 功能描述:
     * 〈字符串转set〉
     *
     * @param dataColumn 数据列
     * @return : java.util.Map<java.lang.String,java.lang.String>
     * @author : yls
     * @date : 2022/02/24 10:07
     */
    public static Map<String, Integer> getColumnSetByString(String dataColumn) {
        dataColumn = Optional.ofNullable(dataColumn).orElse("");
        String[] dataColumnArr = dataColumn.split(SysConstant.SPLIT_FLAG, -1);
        List<String> strings = Arrays.asList(dataColumnArr);
        Map<String, Integer> columnHashMap = new HashMap<>(6);
        strings.forEach(s -> {
            if (StringUtils.isNotBlank(s)) {
                columnHashMap.put(s, 1);
            }
        });
        return columnHashMap;
    }

}
